package com.zenithmind.coding.pojo.entity;

import com.baomidou.mybatisplus.annotation.TableName;
import com.zenithmind.common.base.BaseEntity;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import lombok.EqualsAndHashCode;

import java.time.LocalDateTime;

/**
 * 代码提交实体类
 * 
 * @author ZenithMind Team
 * @since 2025-01-09
 */
@Data
@EqualsAndHashCode(callSuper = true)
@TableName("coding_submission")
@Schema(description = "代码提交实体")
public class Submission extends BaseEntity {

    /**
     * 问题ID
     */
    @Schema(description = "问题ID")
    private String problemId;

    /**
     * 用户ID
     */
    @Schema(description = "用户ID")
    private String userId;

    /**
     * 用户名称
     */
    @Schema(description = "用户名称")
    private String userName;

    /**
     * 编程语言
     */
    @Schema(description = "编程语言")
    private String language;

    /**
     * 源代码
     */
    @Schema(description = "源代码")
    private String sourceCode;

    /**
     * 代码长度
     */
    @Schema(description = "代码长度")
    private Integer codeLength;

    /**
     * 提交状态（0-等待评判，1-评判中，2-通过，3-错误答案，4-时间超限，5-内存超限，6-运行错误，7-编译错误，8-系统错误）
     */
    @Schema(description = "提交状态（0-等待评判，1-评判中，2-通过，3-错误答案，4-时间超限，5-内存超限，6-运行错误，7-编译错误，8-系统错误）")
    private Integer status;

    /**
     * 状态描述
     */
    @Schema(description = "状态描述")
    private String statusMessage;

    /**
     * 运行时间（毫秒）
     */
    @Schema(description = "运行时间（毫秒）")
    private Integer runTime;

    /**
     * 运行内存（KB）
     */
    @Schema(description = "运行内存（KB）")
    private Integer runMemory;

    /**
     * 通过测试用例数
     */
    @Schema(description = "通过测试用例数")
    private Integer passedTestcases;

    /**
     * 总测试用例数
     */
    @Schema(description = "总测试用例数")
    private Integer totalTestcases;

    /**
     * 编译信息
     */
    @Schema(description = "编译信息")
    private String compileInfo;

    /**
     * 运行错误信息
     */
    @Schema(description = "运行错误信息")
    private String errorInfo;

    /**
     * 评判详情（JSON格式）
     */
    @Schema(description = "评判详情（JSON格式）")
    private String judgeDetails;

    /**
     * 代码得分
     */
    @Schema(description = "代码得分")
    private Integer score;

    /**
     * 代码质量评分
     */
    @Schema(description = "代码质量评分")
    private Double qualityScore;

    /**
     * 代码复杂度
     */
    @Schema(description = "代码复杂度")
    private Integer complexity;

    /**
     * 是否最佳提交（0-否，1-是）
     */
    @Schema(description = "是否最佳提交（0-否，1-是）")
    private Integer isBest;

    /**
     * 是否公开（0-私有，1-公开）
     */
    @Schema(description = "是否公开（0-私有，1-公开）")
    private Integer isPublic;

    /**
     * 是否分享（0-否，1-是）
     */
    @Schema(description = "是否分享（0-否，1-是）")
    private Integer isShared;

    /**
     * 提交IP地址
     */
    @Schema(description = "提交IP地址")
    private String ipAddress;

    /**
     * 用户代理
     */
    @Schema(description = "用户代理")
    private String userAgent;

    /**
     * 提交来源（1-网页，2-API，3-IDE插件）
     */
    @Schema(description = "提交来源（1-网页，2-API，3-IDE插件）")
    private Integer submitSource;

    /**
     * 竞赛ID（如果是竞赛提交）
     */
    @Schema(description = "竞赛ID（如果是竞赛提交）")
    private String contestId;

    /**
     * 作业ID（如果是作业提交）
     */
    @Schema(description = "作业ID（如果是作业提交）")
    private String assignmentId;

    /**
     * 评判开始时间
     */
    @Schema(description = "评判开始时间")
    private LocalDateTime judgeStartTime;

    /**
     * 评判结束时间
     */
    @Schema(description = "评判结束时间")
    private LocalDateTime judgeEndTime;

    /**
     * 评判耗时（毫秒）
     */
    @Schema(description = "评判耗时（毫秒）")
    private Long judgeDuration;

    /**
     * 评判机ID
     */
    @Schema(description = "评判机ID")
    private String judgeId;

    /**
     * 相似度检测结果
     */
    @Schema(description = "相似度检测结果")
    private String similarityResult;

    /**
     * 是否抄袭（0-否，1-是）
     */
    @Schema(description = "是否抄袭（0-否，1-是）")
    private Integer isPlagiarism;
}
